#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdio>

using namespace std;
long long l, k, i, j; long long maxn;
long long arr[100010];
int judge_min(long long mid)
{
	long long  sum = 0; long long digit = 0;
	for (int i = 1; i <= l; i++) {
		sum += arr[i];
		if (sum < 0)sum = 0;
		if (sum >= mid) {
			digit++;
			sum = 0;
		}
	}
	if (digit > k)return 1;
	else if (digit < k)return -1;
	else return 0;
}
int main()
{
	cin >> l >> k;
	for (i = 1; i <= l; i++) {
		scanf("%ld", &arr[i]);
		maxn = max(arr[i] + maxn, maxn);
	}
	long long l = 1, r = maxn, mid = 0; long long flag0 = 0, flag = 0;
	while (l <= r){
		mid = (l + r) / 2;
		int fflag = judge_min(mid);
		if (fflag==0) {
			r = mid - 1;
			if (flag0 == 0)flag0 = mid;
			flag = 1;
		}
		else if(fflag==1) {
			l = mid + 1;
			flag = 0;
		}
		else if (fflag == -1) {
			r = mid - 1;
			flag = 0;
		}
	}
	if (flag0 == 0) {
		cout << -1;
		return 0;
	}
	if (flag == 0) cout << mid + 1 << " ";
	else cout << mid << " ";
	l = flag0, r = maxn; flag = 0;
	while (l <= r) {
		mid = (l + r) / 2;
		int fflag = judge_min(mid);
		if (fflag == 0) {
			l = mid + 1;
			flag = 1;
		}
		else {
			r = mid - 1;
			flag = 0;
		}
	}
	if (flag == 0)cout << mid - 1;
	else cout << mid;
	return 0;
}


//
//using namespace std;
//long l, k, i, j; long maxn;
//long arr[100010];
//long ans1 = -1, ans2 = -1;
//int judge_min(long mid)
//{
//	long sum = 0; long digit = 0;
//	for (int i = 1; i <= l; i++) {
//		sum += arr[i];
//		if (sum < 0)sum = 0;
//		if (sum >= mid) {
//			digit++;
//			sum = 0;
//		}
//	}
//	if (digit > k)return 1;
//	else if (digit < k)return -1;
//	else return 0;
//}
//int main()
//{
//	cin >> l >> k;
//	for (i = 1; i <= l; i++) {
//		scanf("%ld", &arr[i]);
//		maxn = max(arr[i] + maxn, maxn);
//	}
//	long l = 1, r = maxn, mid = 0;
//	while (l <= r) {
//		mid = (l + r) / 2;
//		int fflag = judge_min(mid);
//		if (fflag == 0) {
//			r = mid - 1;
//			ans1 = mid;
//		}
//		else if (fflag == 1) {
//			l = mid + 1;
//		}
//		else if (fflag == -1) {
//			r = mid - 1;
//		}
//	}
//	l = 1, r = maxn; 
//	while (l <= r) {
//		mid = (l + r) / 2;
//		int fflag = judge_min(mid);
//		if (fflag == 0) {
//			l = mid + 1;
//			ans2 = mid;
//		}
//		else {
//			r = mid - 1;
//		}
//	}
//	if (ans1 == -1)cout << ans1;
//	else cout << ans1 << " " << ans2;
//	return 0;
//}
//



